﻿package com.rbac.system.service;

import com.rbac.system.common.Result;
import com.rbac.system.dto.SystemConfigDTO;
import com.rbac.system.entity.SystemConfig;
import com.rbac.system.vo.SystemConfigVO;

import java.util.List;
import java.util.Map;

/**
 * 系统配置服务接口
 */
public interface SystemConfigService {
    
    /**
     * 获取所有配置
     */
    Result<List<SystemConfigVO>> getAllConfigs();
    
    /**
     * 根据分组获取配置
     */
    Result<List<SystemConfigVO>> getConfigsByGroup(String group);
    
    /**
     * 根据配置键获取配置值
     */
    String getConfigValue(String configKey);
    
    /**
     * 根据配置键获取配置值（带默认值）
     */
    String getConfigValue(String configKey, String defaultValue);
    
    /**
     * 获取布尔类型配置值
     */
    boolean getBooleanConfig(String configKey, boolean defaultValue);
    
    /**
     * 获取整数类型配置值
     */
    int getIntConfig(String configKey, int defaultValue);
    
    /**
     * 根据ID获取配置
     */
    Result<SystemConfigVO> getConfigById(Long id);
    
    /**
     * 新增配置
     */
    Result<Void> addConfig(SystemConfigDTO configDTO);
    
    /**
     * 更新配置
     */
    Result<Void> updateConfig(Long id, SystemConfigDTO configDTO);
    
    /**
     * 更新配置值
     */
    Result<Void> updateConfigValue(String configKey, String configValue);
    
    /**
     * 批量更新配置
     */
    Result<Void> batchUpdateConfigs(Map<String, String> configs);
    
    /**
     * 删除配置
     */
    Result<Void> deleteConfig(Long id);
    
    /**
     * 初始化系统默认配置
     */
    void initDefaultConfigs();
    
    /**
     * 检查邮箱功能是否启用
     */
    boolean isEmailEnabled();
    
    /**
     * 检查邮箱注册是否启用
     */
    boolean isEmailRegisterEnabled();
    
    /**
     * 检查邮箱登录是否启用
     */
    boolean isEmailLoginEnabled();

    /**
     * 检查手机号功能是否启用
     */
    boolean isPhoneEnabled();

    /**
     * 检查验证码功能是否启用
     */
    boolean isCaptchaEnabled();

    /**
     * 检查登录验证码是否启用
     */
    boolean isLoginCaptchaEnabled();

    /**
     * 检查注册验证码是否启用
     */
    boolean isRegisterCaptchaEnabled();

    /**
     * 检查手机号注册是否启用
     */
    boolean isPhoneRegisterEnabled();

    /**
     * 检查手机号登录是否启用
     */
    boolean isPhoneLoginEnabled();
}


